package com.c2b.algorithm.leetcode.base;

/**
 * <a href='https://leetcode.cn/problems/keep-multiplying-found-values-by-two/'>将找到的值乘以 2(Keep Multiplying Found Values by Two)</a>
 * <p>给你一个整数数组 nums ，另给你一个整数 original ，这是需要在 nums 中搜索的第一个数字。</p>
 * <p>
 * 接下来，你需要按下述步骤操作：
 *     <ol>
 *         <li>如果在 nums 中找到 original ，将 original 乘以 2 ，得到新 original（即，令 original = 2 * original）。</li>
 *         <li>否则，停止这一过程。</li>
 *         <li>只要能在数组中找到新 original ，就对新 original 继续 重复 这一过程。</li>
 *     </ol>
 *     返回 original 的 最终 值。
 * </p>
 *
 * <p>
 * <b>示例：</b>
 * <pre>
 * 示例 1：
 *      输入：nums = [5,3,6,1,12], original = 3
 *      输出：24
 *      解释：
 *          - 3 能在 nums 中找到。3 * 2 = 6 。
 *          - 6 能在 nums 中找到。6 * 2 = 12 。
 *          - 12 能在 nums 中找到。12 * 2 = 24 。
 *          - 24 不能在 nums 中找到。因此，返回 24 。
 *
 * 示例 2：
 *      输入：nums = [2,7,9], original = 4
 *      输出：4
 *      解释：
 *          - 4 不能在 nums 中找到。因此，返回 4 。
 * </pre>
 * </p>
 *
 * <p>
 * <b>提示：</b>
 * <ul>
 *     <li>1 <= nums.length <= 1000</li>
 *     <li>1 <= nums[i], original <= 1000</li>
 * </ul>
 * </p>
 *
 * @author c2b
 * @since 2024/1/19 11:18
 */
public class LC2154KeepMultiplyingFoundValuesByTwo_S {

    static class Solution {
        public int findFinalValue(int[] nums, int original) {
            boolean[] visited = new boolean[1001];
            for (int num : nums) {
                visited[num] = true;
            }
            while (true) {
                if (original >= visited.length || !visited[original]) {
                    return original;
                }
                original *= 2;
            }
        }
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.findFinalValue(new int[]{5, 3, 6, 1, 12}, 3));
        System.out.println(solution.findFinalValue(new int[]{2, 7, 9}, 4));
    }
}
